package com.allen.app.common.config.rabbitmq;

/**
 * RabbitMQ初始化工具
 */
public interface RabbitInitializer {

    /**
     * 延时不同时间队列
     * @param exchange 信道名
     * @param dlx 队列名
     */
    void delayDifferentTime(String exchange, String dlx);

    /**
     * 延时队列
     * @param exchange 信道名
     * @param dlx 死信队列名
     * @param to 转发队列名
     */
    void delay(String exchange, String dlx, String to);

    /**
     * 普通队列
     * @param exchange 信道名
     * @param queue 队列名
     */
    void normal(String exchange, String queue);

    /**
     * 广播队列
     * @param exchange 信道名
     * @param queues 队列集合
     */
    void publish(String exchange, String... queues);

    /**
     * 主题队列
     * @param exchange 信道名
     * @param queue 队列名
     * @param routingKey 路由规则
     */
    void topic(String exchange, String queue, String routingKey);

    /**
     * 是否持久化
     */
    boolean DURABLE = true;

    /**
     * 仅创建者可以使用的私有队列，断开后自动删除
     */
    boolean EXCLUSIVE = false;

    /**
     * 当所有消费客户端连接断开后，是否自动删除队列
     */
    boolean AUTO_DELETE = false;

}
